bitkeeper revision 1.72 (3e53e864n4XeM5UI6L2plu_QV-Asug)
authorkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>
Wed, 19 Feb 2003 20:26:12 +0000 (20:26 +0000)
committerkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>
Wed, 19 Feb 2003 20:26:12 +0000 (20:26 +0000)
init.c, xl_block.c:
  Fix bugs in earlier blkdev checkin.

xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
xenolinux-2.4.16-sparse/arch/xeno/mm/init.c

index e9f1aed53c1c00f09831e64db4af79be8a91108f..7eb4d9d2ec45a721922a2cb7dedd68236a2d6b91 100644 (file)
@@ -410,7 +410,7 @@ int __init xlblk_init(void)
     int loop, error, result;
 
     /* This mapping was created early at boot time. */
-    blk_ring = (blk_ring_t *)FIX_BLKRING_BASE;
+    blk_ring = (blk_ring_t *)fix_to_virt(FIX_BLKRING_BASE);
 
     blk_ring->req_prod = blk_ring->req_cons = 0;
     blk_ring->resp_prod = blk_ring->resp_cons = 0;
index ac2019910e9aab7905e900782fb3b71d544725ae..71b22ddcac8933fd55e9c90935ce0babac1e570d 100644 (file)
@@ -141,9 +141,9 @@ void __set_fixmap (enum fixed_addresses idx, unsigned long phys,
 static void __init fixrange_init (unsigned long start, 
                                   unsigned long end, pgd_t *pgd_base)
 {
-    pgd_t *pgd;
-    pmd_t *pmd;
-    pte_t *pte;
+    pgd_t *pgd, *kpgd;
+    pmd_t *pmd, *kpmd;
+    pte_t *pte, *kpte;
     int i, j;
     unsigned long vaddr;
 
@@ -157,9 +157,13 @@ static void __init fixrange_init (unsigned long start,
         for (; (j < PTRS_PER_PMD) && (vaddr != end); pmd++, j++) {
             if (pmd_none(*pmd)) {
                 pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
+                clear_page(pte);
+                kpgd = pgd_offset_k((unsigned long)pte);
+                kpmd = pmd_offset(kpgd, (unsigned long)pte);
+                kpte = pte_offset(kpmd, (unsigned long)pte);                
+                queue_l1_entry_update(__pa(kpte), 
+                                      (*(unsigned long *)kpte)&~_PAGE_RW);
                 set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)));
-                if (pte != pte_offset(pmd, 0))
-                    BUG();
             }
             vaddr += PMD_SIZE;
         }
@@ -195,7 +199,7 @@ void __init paging_init(void)
      * mappings will be set by set_fixmap():
      */
     vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
-    fixrange_init(vaddr, 0, init_mm.pgd);
+    fixrange_init(vaddr, HYPERVISOR_VIRT_START, init_mm.pgd);
 
     /*
      * XXX We do this conversion early, so that all other page tables